# 创建时间：2025/5/4 星期日 19:41
# 创建人：李德才


""" 定义一个类，在 python 中，类的属性是可以动态添加的， """
import types


class Person:
    """ 正常的类是允许随意添加属性的，但是如果使用了 slots ，那么就只能添加 slots 中定义的属性了 """
    __slots__ = ('name', 'age')

    def __init__(self, name, age):
        self.name = name
        self.age = age

    def say_hello(self):
        print("Hello, my name is {} and I am {} years old.".format(self.name, self.age))


p = Person('John', 30)

""" 动态添加一个属性 """
p.address = '123 Main St'
print(p.address)  # 输出：123 Main St


def funcA(string):
    print("funcA_" + string)


""" 动态添加一个方法 """
Person.add_slot = funcA
Person.add_slot("cdcddcsc")


def funcB(cls, string):
    print("funcB_" + string)


""" 动态添加一个方法  """

p1 = Person("cdc", 23)

p1.funcB = types.MethodType(funcB, p1)

p1.funcB("cdccdcdsc")

""" 动态添加一个方法  """


@classmethod
def funcC(cls, string):
    print("funcC_" + string)


Person.funcC = funcC
Person.funcC("cdcddcsc")

""" 动态添加一个方法 """


@staticmethod
def funcD(string):
    print("funcD_" + string)


Person.funcD = funcD
Person.funcD("cdcddcsc")
